/**
 * @Observer.as
 *
 * @author sodaChen mail:sujun10@qq.com
 * @version 1.0
 * <br>Program Name:DoEasy
 * <br>Date:2016-9-7
 */
package com.asframe.pattern.observers
{
	import flash.events.EventDispatcher;


	/**
	 * 观察者
	 * @author sodaChen
	 * #Date:2016-9-7
	 */
	public class Observer extends EventDispatcher implements INoticeObserver
	{
		/** 框架内部使用的主题 **/
		protected var subject:NoticeSubjects;

		/** 需要接受的通知的,由子类进行重写，但是只能在构造器里重新赋值 **/
		protected var mNtocies:Array;
//		/** 自动反射机制通知到方法的机制,主要用于处理网络通讯等非字符串的通知 **/
//		protected var mAutoNotice:HashMap;

		public function Observer()
		{
			super();
			subject = new NoticeSubjects();
		}

		public function update(notice:*, args:Array):void
		{
		}
		/**
		 * 添加一个观察者通知
		 * @param notice 通知名称
		 * @param linsten 通知监听函数
		 *
		 */
		public function addNotice(notice:*,linsten:Function = null):void
		{
			if(linsten == null)
				subject.addObserver(notice,this);
			else
				subject.addNotice(notice,linsten);
		}

		/**
		 * 删除一个观察者通知
		 * @param notice 通知名称
		 * @param linsten 删除指定监听函数
		 *
		 */
		public function removeNotice(notice:*,linsten:Function = null):void
		{
			if(linsten == null)
				subject.removeObserver(notice,this);
			else
				subject.removeNotice(notice,linsten);
		}
		public function send(notice:*, ...args):void
		{
		}
		/**
		 * 子类可重写这个方法
		 * @return
		 *
		 */
		public function getNotices():Array
		{
			return mNtocies;
		}
	}
}